package com.java;

/**
 * static
 */
public class Static {
    // 静态内部类请到内部类部分查看
    
    // 静态成员变量
    static String staticName;
    public String publicName;
    
    // 静态成员方法
    static void staticFunc() {
        System.out.println(staticName);
        
        // 无法从 static 上下文引用非 static 字段
        // System.out.println(publicName);
    }
    
    public void publicFunc() {
        System.out.println(staticName);
        System.out.println(publicName);
        
        // 此处不允许使用修饰符 static
        // static String name = "不能定义静态局部变量";
    }
    
    public static void main(String[] args) {
        Static static1 = new Static();
        Static static2 = new Static();
        
        System.out.println(Static.staticName); // null
        System.out.println(static1.staticName); // null
        System.out.println(static1.publicName); // null
        System.out.println(static2.staticName); // null
        System.out.println(static2.publicName); // null
        
        Static.staticFunc(); // null
        static1.staticFunc(); // null
        static1.publicFunc(); // null null
        
        static1.staticName = "静态成员变量";
        static1.publicName = "公共成员变量";
        
        System.out.println(Static.staticName); // 静态成员变量
        System.out.println(static1.staticName); // 静态成员变量
        System.out.println(static1.publicName); // 公共成员变量
        System.out.println(static2.staticName); // 静态成员变量
        System.out.println(static2.publicName); // null
        
        Static.staticFunc(); // 静态成员变量
        static1.staticFunc(); // 静态成员变量
        static1.publicFunc(); // 静态成员变量 公共成员变量
    }
}
